import 'dart:math';

import 'package:common_utils/common_utils.dart';
import 'package:flutter/services.dart';

/// NickName
String nickName(String name) {
  if (name.length >= 3) {
    return name.substring(name.length - 2);
  }
  return name;
}

///数字千位符数，字格式化，金额格式化
String formatNum(num, {point: 2}) {
  if (num != null) {
    String str = double.parse(num.toString()).toString();
    // 分开截取
    List<String> sub = str.split('.');
    // 处理值
    List val = List.from(sub[0].split(''));
    // 处理点
    List<String> points = List.from(sub[1].split(''));
    //处理分割符
    for (int index = 0, i = val.length - 1; i >= 0; index++, i--) {
      // 除以三没有余数、不等于零并且不等于1 就加个逗号
      if (index % 3 == 0 && index != 0 ) val[i] = val[i] + ',';
    }
    // 处理小数点
    for (int i = 0; i <= point - points.length; i++) {
      points.add('0');
    }
    //如果大于长度就截取
    if (points.length > point) {
      // 截取数组
      points = points.sublist(0, point);
    }
    // 判断是否有长度
    if (points.length > 0) {
      return '${val.join('')}.${points.join('')}';
    } else {
      return val.join('');
    }
  } else {
    return "0.0";
  }
}

/*
  * 判断对象是否为空.(String List Map)
  */
 bool isEmpty(Object? data) {
   if(data=='0001-01-01T00:00:00Z'){
     return true;
   }
return ObjectUtil.isEmpty(data);
}

///36位随机数
 String Uuid() {
String alphabet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
int strLength = 36;

/// 生成的字符串固定长度
String left = '';
for (var i = 0; i < strLength; i++) {
// right = right + (min + (Random().nextInt(max - min))).toString();
left = left + alphabet[Random().nextInt(alphabet.length)];
}
return left;
}

/*涉及金钱使用：
只能录入数字，并且录入的数字最多保留二位小数。不会以0开头，自动转为0.。
小数点只能输入一个且之后只能输入两位数字
不能输入除.和数字外的其他字符*/
class PrecisionLimitFormatter extends TextInputFormatter {
  int _scale;

  PrecisionLimitFormatter(this._scale);

  RegExp exp = RegExp(r"[0-9]");
  static const String POINTER = ".";
  static const String DOUBLE_ZERO = "00";
  static const String ZERO = "0";

  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    print('oldValue:'+oldValue.text);
    print('newValue:'+newValue.text);
    if(newValue.text.startsWith('.')){
      return TextEditingValue(text: '0.',selection:TextSelection.collapsed(offset: 2));
    }

    // if (newValue.text.startsWith(POINTER) && newValue.text.length == 1) {
    //   //第一个不能输入小数点
    //   return oldValue;
    // }

    ///输入完全删除
    if (newValue.text.isEmpty) {
      return TextEditingValue();
    }

    ///只允许输入小数
    if (!exp.hasMatch(newValue.text)) {
      return oldValue;
    }

    if(newValue.text.startsWith(ZERO) && newValue.text.split("0")[1].startsWith(RegExp(r'[0-9]'))){
      return TextEditingValue(text: '0',selection:TextSelection.collapsed(offset: 1));

      // return newValue;
    }

    ///包含小数点的情况
    if (newValue.text.contains(POINTER)) {
      ///包含多个小数
      if (newValue.text.indexOf(POINTER) != newValue.text.lastIndexOf(POINTER)) {
        return oldValue;
      }
      String input = newValue.text;
      int index = input.indexOf(POINTER);

      ///小数点后位数
      int lengthAfterPointer = input.substring(index, input.length).length - 1;

      ///小数位大于精度
      if (lengthAfterPointer > _scale) {
        return oldValue;
      }
    } else if (newValue.text.startsWith(POINTER) || newValue.text.startsWith(DOUBLE_ZERO)) {
      ///不包含小数点,不能以“00”开头
      return oldValue;
    }
    return newValue;
  }
}
//验证字符串是否全是数字
bool isNumber(String str) {
  final reg = RegExp(r'^-?[0-9]+');
  print('$str 是否数字:${reg.hasMatch(str)}');
  return reg.hasMatch(str);
}